tools/migrate: Fix regression when migrating from older version of Xen
authorAndrew Cooper <andrew.cooper3@citrix.com>
Thu, 10 Oct 2013 11:23:10 +0000 (12:23 +0100)
committerIan Campbell <ian.campbell@citrix.com>
Thu, 10 Oct 2013 11:28:21 +0000 (12:28 +0100)
commit7051d5c872e3e708b2d4b2088215d6ab1b33de1b
tree78359bc2523ab1b4e5e506dba98aa81ee09657e0
parenta825dd6515aa8eab804789ad8bba39df9ca9be08
tools/migrate: Fix regression when migrating from older version of Xen

Commit 00a4b65f8534c9e6521eab2e6ce796ae36037774 Sep 7 2010
  "libxc: provide notification of final checkpoint to restore end"
broke migration from any version of Xen using tools from prior to that commit

Older tools have no idea about an XC_SAVE_ID_LAST_CHECKPOINT, causing newer
tools xc_domain_restore() to start reading the qemu save record, as
ctx->last_checkpoint is 0.

The failure looks like:
  xc: error: Max batch size exceeded (1970103633). Giving up.
where 1970103633 = 0x756d6551 = *(uint32_t*)"Qemu"

With this fix in place, the behaviour for normal migrations is reverted to how
it was before the regression; the migration is considered non-checkpointed
right from the start.  A XC_SAVE_ID_LAST_CHECKPOINT chunk seen in the
migration stream is a nop.  For checkpointed migrations the behaviour is
unchanged.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Acked-by: Ian Campbell <Ian.Campbell@citrix.com>
CC: Ian Jackson <Ian.Jackson@eu.citrix.com>
Acked-by: Shriram Rajagopalan <rshriram@cs.ubc.ca> (Remus bits)
12 files changed:
tools/libxc/xc_domain_restore.c
tools/libxc/xc_nomigrate.c
tools/libxc/xenguest.h
tools/libxl/libxl.h
tools/libxl/libxl_create.c
tools/libxl/libxl_internal.h
tools/libxl/libxl_save_callout.c
tools/libxl/libxl_save_helper.c
tools/libxl/libxl_types.idl
tools/libxl/xl_cmdimpl.c
tools/python/xen/xend/XendCheckpoint.py
tools/xcutils/xc_restore.c